{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Self-Organizing Map.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "toc_visible": true,
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/ayush-09/Self-Organizing-Map/blob/main/Self_Organizing_Map.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "t9oX7AL3nyLm"
      },
      "source": [
        "#Self Organizing Map"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1KB28WUso0Bj",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "ade2ae79-1927-431e-c10c-880b80b8dd2c"
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive/')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Drive already mounted at /content/drive/; to attempt to forcibly remount, call drive.mount(\"/content/drive/\", force_remount=True).\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6AX0Y23PnyOI"
      },
      "source": [
        "### Importing the libraries\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gaSkOFKKBB3b"
      },
      "source": [
        "import numpy as np\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "SCl7ERn_n539"
      },
      "source": [
        "## Importing the dataset"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4hgeaN3CoRfl"
      },
      "source": [
        "dataset = pd.read_csv('/content/drive/MyDrive/Datasets/Credit_Card_Applications.csv')\n",
        "X = dataset.iloc[:, :-1].values \n",
        "y = dataset.iloc[:, -1].values"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "RQHQinw5y972",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 195
        },
        "outputId": "e8380c6d-163a-48bb-bad8-2ddf8078091c"
      },
      "source": [
        "dataset.head()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>CustomerID</th>\n",
              "      <th>A1</th>\n",
              "      <th>A2</th>\n",
              "      <th>A3</th>\n",
              "      <th>A4</th>\n",
              "      <th>A5</th>\n",
              "      <th>A6</th>\n",
              "      <th>A7</th>\n",
              "      <th>A8</th>\n",
              "      <th>A9</th>\n",
              "      <th>A10</th>\n",
              "      <th>A11</th>\n",
              "      <th>A12</th>\n",
              "      <th>A13</th>\n",
              "      <th>A14</th>\n",
              "      <th>Class</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>15776156</td>\n",
              "      <td>1</td>\n",
              "      <td>22.08</td>\n",
              "      <td>11.46</td>\n",
              "      <td>2</td>\n",
              "      <td>4</td>\n",
              "      <td>4</td>\n",
              "      <td>1.585</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "      <td>100</td>\n",
              "      <td>1213</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>15739548</td>\n",
              "      <td>0</td>\n",
              "      <td>22.67</td>\n",
              "      <td>7.00</td>\n",
              "      <td>2</td>\n",
              "      <td>8</td>\n",
              "      <td>4</td>\n",
              "      <td>0.165</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>2</td>\n",
              "      <td>160</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>15662854</td>\n",
              "      <td>0</td>\n",
              "      <td>29.58</td>\n",
              "      <td>1.75</td>\n",
              "      <td>1</td>\n",
              "      <td>4</td>\n",
              "      <td>4</td>\n",
              "      <td>1.250</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "      <td>280</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>15687688</td>\n",
              "      <td>0</td>\n",
              "      <td>21.67</td>\n",
              "      <td>11.50</td>\n",
              "      <td>1</td>\n",
              "      <td>5</td>\n",
              "      <td>3</td>\n",
              "      <td>0.000</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>11</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>15715750</td>\n",
              "      <td>1</td>\n",
              "      <td>20.17</td>\n",
              "      <td>8.17</td>\n",
              "      <td>2</td>\n",
              "      <td>6</td>\n",
              "      <td>4</td>\n",
              "      <td>1.960</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>14</td>\n",
              "      <td>0</td>\n",
              "      <td>2</td>\n",
              "      <td>60</td>\n",
              "      <td>159</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   CustomerID  A1     A2     A3  A4  A5  ...  A10  A11  A12  A13   A14  Class\n",
              "0    15776156   1  22.08  11.46   2   4  ...    0    1    2  100  1213      0\n",
              "1    15739548   0  22.67   7.00   2   8  ...    0    0    2  160     1      0\n",
              "2    15662854   0  29.58   1.75   1   4  ...    0    1    2  280     1      0\n",
              "3    15687688   0  21.67  11.50   1   5  ...   11    1    2    0     1      1\n",
              "4    15715750   1  20.17   8.17   2   6  ...   14    0    2   60   159      1\n",
              "\n",
              "[5 rows x 16 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 37
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "fYHJ0dd6n-d4"
      },
      "source": [
        "## Feature Scaling\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sY7JiUxwoSOd"
      },
      "source": [
        "from sklearn.preprocessing import MinMaxScaler\n",
        "sc = MinMaxScaler(feature_range = (0,1))\n",
        "X = sc.fit_transform(X)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "aPp-7wfNoAhR"
      },
      "source": [
        "##Training the SOM\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3iuAhM6ooS0k"
      },
      "source": [
        "from minisom import MiniSom\n",
        "som = MiniSom(x=10, y=10, input_len= 15, sigma= 1.0, learning_rate = 0.5)\n",
        "som.random_weights_init(X)\n",
        "som.train_random(data = X, num_iteration = 100)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "YiU27C-ToCnH"
      },
      "source": [
        "##Visualizing the results\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XzrIX4fZoTQj",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 269
        },
        "outputId": "f63a271a-3a6c-4f96-bd47-70207cccc448"
      },
      "source": [
        "from pylab import bone, pcolor, colorbar, plot, show\n",
        "bone()\n",
        "pcolor(som.distance_map().T)\n",
        "colorbar()\n",
        "markers = ['o', 's']\n",
        "colors = ['r', 'g']\n",
        "for i, x in enumerate(X):\n",
        "    w = som.winner(x)\n",
        "    plot(w[0] + 0.5,\n",
        "         w[1] + 0.5,\n",
        "         markers[y[i]],\n",
        "         markeredgecolor = colors[y[i]],\n",
        "         markerfacecolor = 'None',\n",
        "         markersize = 10,\n",
        "         markeredgewidth = 2)\n",
        "show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4C-I_jBfoEkP"
      },
      "source": [
        "## Finding the frauds\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4xd-jb8doTlM"
      },
      "source": [
        "mappings = som.win_map(X)\n",
        "frauds = np.concatenate((mappings[(4,2)], mappings[(6,6)]), axis = 0)\n",
        "frauds = sc.inverse_transform(frauds)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "VbeCrDHTzWx8",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "b6d4769d-6fac-46ab-c8d7-9dad0336fb1b"
      },
      "source": [
        "frauds[:,0]"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([15789201., 15800049., 15785367., 15801817., 15781574., 15707681.,\n",
              "       15648069., 15731586., 15801473., 15694666., 15699238., 15593959.,\n",
              "       15629750., 15592999., 15742009., 15611409., 15721504., 15608916.])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 44
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "frXqAlpo84b1"
      },
      "source": [
        "##Printing the Fraunch Clients"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "54a4NnJo8761",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "2dab7fee-b096-4213-abe7-ff2d91b4b0df"
      },
      "source": [
        "print('Fraud Customer IDs')\n",
        "for i in frauds[:, 0]:\n",
        "  print(int(i))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Fraud Customer IDs\n",
            "15789201\n",
            "15800049\n",
            "15785367\n",
            "15801817\n",
            "15781574\n",
            "15707681\n",
            "15648069\n",
            "15731586\n",
            "15801473\n",
            "15694666\n",
            "15699238\n",
            "15593959\n",
            "15629750\n",
            "15592999\n",
            "15742009\n",
            "15611409\n",
            "15721504\n",
            "15608916\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "y17zEoAhzh6I"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}